Computer hardware is becoming increasingly distributed and remote, resulting in networks of computers for providing services and solving problems in concert rather than as stand-alone systems. Although such distributed services networks generally facilitate problem solving, they also increase the need for flexibility and functionality in software executing on the computers. An example of a distributed services computer network is a client-server system comprising a collection of client nodes, e.g., workstations or personal computers, that communicate over a network with various server nodes. The servers are typically computers having hardware and software elements that provide a set of services, or operations, for use by the clients in order to increase the efficiency of their operations.
Several types of networks, including local area networks (LANs), may be employed in the client-server system. A LAN is a limited area network that typically consists of a transmission medium for interconnecting the client and server nodes. The nodes coupled to the network typically communicate by exchanging discrete frames or packets of data according to predefined protocols. In this context, a protocol consists of a set of rules defining how the nodes interact with each other. Communication in the client-server system typically takes the form of frame or packet exchanges, wherein the clients send requests to the servers, which perform their services and communicate results back to the clients. A typical service provided by a server is a conventional queue-based printing service.
Queue-based print services are generally based upon the creation and linking of three components: a printer, print queues and a print server. Setting up a queue-based printing system is a complicated task requiring a user on a client node to install a printer driver and then “capture” a port to a printer. Broadly stated, software executing on the client submits a print job into a first queue on the print server where an accounting service retrieves the job to perform bill processing. Thereafter, the job is loaded into a second queue where it is stored while waiting to be serviced by the printer. The accounting service logic executing on the print server examines the data stream of the print job to determine resource consumption for billing purposes (e.g., billing for sheets of paper or data printed).
While this complicated queue-based printing system works well, it is rather time consuming and inefficient in terms of resource consumption. Specifically, the accounting service software on the print server must examine the data stream of a print job in order to perform the appropriate accounting function. In addition, queue-based printing requires insertion and retrieval of print jobs to and from a plurality of queue structures. Such an approach is inefficient in terms of the use of client and server resources since read and write operations associated with the various data structures consume those resources.